from captcha.image import ImageCaptcha
import numpy as np
import string

# characters 为验证码上的字符集，10个数字加26个大小写英文字母
# 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
characters = string.digits + string.ascii_letters

# 定义图片的宽和高以及验证码个数，取值范围
width, height, n_len, n_class = 170, 80, 4, len(characters)


# 传入一个列表，和要生成的验证码位数，返回一个验证码字符串
def random_choice(choice_list, k):
    random_txt = ''
    for i in range(0, k):
        char = np.random.choice(choice_list)
        random_txt += char
    return random_txt


def creat_captcha(k, filepath='captcha.png'):
    image = ImageCaptcha(width=width, height=height)  # 设置图片的宽高，字体fonts，字体大小font_sizes
    captcha_txt = random_choice(list(characters), k)  # 生成验证码字符
    captcha_img = image.generate_image(captcha_txt)  # 生成验证码图片

    # 保存验证码到指定位置
    captcha_img.save(filepath)
    return captcha_txt
